<?php

namespace App\Http\Controllers\Api;

use App\Helpers\Enums\ResponseEnum;
use App\Http\Controllers\BaseController;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Throwable;

class OrderController extends BaseController
{
    /**
     * 提交订单
     * @return JsonResponse
     * @throws Throwable
     */
    public function store(): JsonResponse
    {
        $input = 'request()->input()获取用户提交的内容1';
        // 原子锁，防止用户连续点击造成重复请求
        $lockKey = sprintf('order_store_%s_%s', $this->user()->id, md5(serialize($input)));
        $lock = Cache::lock($lockKey, 5);
        if (!$lock->get()){
            return $this->fail(ResponseEnum::HTTP_ACTION_COUNT_ERROR);
        }
        // 增加事务
        DB::transaction(function () use ($input){
            // 1、获取购物车的商品列表
            // 2、计算商品总金额
            // 3、创建订单，生成订单号等信息
            // 4、清理购物车记录
            // 5、减库存（乐观锁，先查数量再减库存，防止并发）
//            return Goods::query()->where('id', 1)->where('number', '>=', 1)->decrement('number', 1);
            // 6、设置超时任务
        });
        return $this->success();
    }
}
